今天就是鐵人賽最後一天了,回想過去的一個月裡真的做了很多的事情,感謝鐵人賽能讓我的生活變得更豐富(爆炸?)以及充實。透過這次的鐵人賽也讓我有機會能夠整理關於 Data pipeline 以及 Airflow 相關的經驗,自己在過程當中得到了許多,非常感謝主辦單位以及各位讀者!
在最後一天我們來談談 Data pipeline 的優化方向,我們知道,對於 Data pipeline 的設計和實作我們很難一次就做到完美,甚至我們都不確定有沒有完美的存在,但我們可以不斷的優化,讓我們所建立的 Data pipeline 盡可能達到我們心中的完美!這邊提供一些優化方向進行思考。
效能優化是一個非常大的主題,簡單來說就是讓 Data pipeline的執行更有效率,然而要達到這個目的,方法卻有千百種。下面提供一些方向供大家進行參考及分析。
無腦直接提升硬體規格或是加開雲端的資源,基本上會收到一定的效果。但是要做的更精細,也讓資源更妥善地被利用,需要了解整個系統的效能瓶頸並進行分析及應對。另外也要確保 Airflow 有足夠的計算資源,包含CPU和記憶體,根據工作的負載調整節點的數量,讓系統可以處理同時執行的任務。
檢查 DAG 定義的流程是最佳化的,避免過多的任務依賴和循環依賴。我們在 Relations 的篇章有學習到 Airflow 的相依性,如果有些 Task 多了不必要的關聯性的話,那執行上就會多了不必要的等待時間,因此也會降低 DAG 執行的效率。因此 DAG 的設計對於效能的影響也是不能小覷的。
在一些情景中,特別是如果工作負載量非常大且可以並行執行的話,可以考慮使用分散式執行器, 像是 Celery,用以平行處理任務。Celery是一個分散式任務佇列系統,可以用來執行異步任務,例如後台處理、異步任務處理、定時任務等。Airflow可以使用Celery 作為其執行器之一,我們可以將Airflow的任務交給Celery執行,從而實現異步、分散式任務處理,藉此分擔負載,提高效能。在這邊由於篇幅關係我們無法做完整的介紹,如果有興趣的朋友可以參考Celery Executor官方網站資源。
在我們的Airflow 系統中會與資料庫有密切的協作,其中主要可以分成兩種:
不論是對於內部或是外部,資料庫性能都會影響到 DAG 的執行效率。Airflow 系統本身使用資料庫來儲存元數據和任務狀態。因此要確認資料庫設置和性能是否足以支持工作負載。而對於使用的 SQL 指令,也須根據情境使用適合的指令來保持 DAG 的執行效率。
對於 Data 團隊來說,安全性是非常重要的,特別是如果處理的資料是非常敏感的資料時,如果安全性有問題的話,很容易會讓資料遭到竊取。而安全性的部分,主要可以分為系統管理層以及連接層,系統管理層主要是關於使用者的部分,如何很好的管控使用者的權限,避免有人得到過高的權限而觸碰到不該觸碰到的資料。對於連接層則是要避免有意人士透過網路安全漏洞,以各種方法竊取 Data。
我們都知道 Data pipeline 需要持續優化,但是怎麼判斷如何優化呢?如果沒有頭緒的時候,透過 Log 的資訊會提供我們許多的方向。因此如果能妥善的管理 Airflow 的 Log 可以對整個系統的幫助有所提升。Airflow 的 Log 主要可以分成三大來源:
在預設中 logs 都被儲存在 $AIRFLOW_HOME/logs,我們可以隨著我們需求進行解析及管理,甚至與可以對應到視覺化監測的系統像是 Grafana 等系統進行監控。透過 Log 管理以及解析,讓開發者及維運者能更通曉 Airflow 整體的執行狀況進而提升。
今天跟大家分享了 Data pipeline的優化方向,就像是我們的 Data pipeline 需要持續優化一樣,身為工程師的我們也需要不斷的提升,讓我們能夠具備更多的價值,幫助我們的團隊以及我們自己能夠不斷的成長。
如同一開始所說的在上個月的期間真的做了很多事,也不會忘記那些一邊旅遊一邊趕稿的日子,反而因此讓旅遊變得更加深刻,再次感謝主辦單位以及各位夥伴和讀者朋友們的陪伴!
最後附上在鐵人賽期間去日本摩耶山看到非常美的夜景照片,當天為了到山上看夜景位置,要先搭兩段的纜車才能到達,不過看到夜景時真的覺得充滿悸動,我想我們的人生也像是這樣吧,當我們不斷爬到更高的位置的時候,就能看到更美麗更絢麗的風景!共勉之!
2023鐵人賽,完賽!